package base.dao;

import base.aop.transactional.GFTransactionalManage;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author : GuoFei
 * @date : 2018/12/22 14:48
 */
@Component
public class BaseDao {

    private static Logger logger = LoggerFactory.getLogger(BaseDao.class);

    // 当前连接的线程链接
    private ThreadLocal<Connection> threadConn = new ThreadLocal<>();

    @Resource(name = "dataSource")
    private DataSource dataSource;

    public static void main(String[] args) {
        String sql = "insert into testUser (name,password) values ('test_1_0','1'),('test_1_1','1'),('test_1_2','1'),('test_1_3','1'),('test_1_4','1'),('test_1_5','1'),('test_1_6','1'),('test_1_7','1'),('test_1_8','1'),('test_1_9','1'),('test_1_10','1'),('test_1_11','1'),('test_1_12','1'),('test_1_13','1'),('test_1_14','1'),('test_1_15','1'),('test_1_16','1'),('test_1_17','1'),('test_1_18','1'),('test_1_19','1'),('test_1_20','1'),('test_1_21','1'),('test_1_22','1'),('test_1_23','1'),('test_1_24','1'),('test_1_25','1'),('test_1_26','1'),('test_1_27','1'),('test_1_28','1'),('test_1_29','1'),('test_1_30','1'),('test_1_31','1'),('test_1_32','1'),('test_1_33','1'),('test_1_34','1'),('test_1_35','1'),('test_1_36','1'),('test_1_37','1'),('test_1_38','1'),('test_1_39','1'),('test_1_40','1'),('test_1_41','1'),('test_1_42','1'),('test_1_43','1'),('test_1_44','1'),('test_1_45','1'),('test_1_46','1'),('test_1_47','1'),('test_1_48','1'),('test_1_49','1'),('test_1_50','1'),('test_1_51','1'),('test_1_52','1'),('test_1_53','1'),('test_1_54','1'),('test_1_55','1'),('test_1_56','1'),('test_1_57','1'),('test_1_58','1'),('test_1_59','1'),('test_1_60','1'),('test_1_61','1'),('test_1_62','1'),('test_1_63','1'),('test_1_64','1'),('test_1_65','1'),('test_1_66','1'),('test_1_67','1'),('test_1_68','1'),('test_1_69','1'),('test_1_70','1'),('test_1_71','1'),('test_1_72','1'),('test_1_73','1'),('test_1_74','1'),('test_1_75','1'),('test_1_76','1'),('test_1_77','1'),('test_1_78','1'),('test_1_79','1'),('test_1_80','1'),('test_1_81','1'),('test_1_82','1'),('test_1_83','1'),('test_1_84','1'),('test_1_85','1'),('test_1_86','1'),('test_1_87','1'),('test_1_88','1'),('test_1_89','1'),('test_1_90','1'),('test_1_91','1'),('test_1_92','1'),('test_1_93','1'),('test_1_94','1'),('test_1_95','1'),('test_1_96','1'),('test_1_97','1'),('test_1_98','1'),('test_1_99','1'),('test_1_100','1'),('test_1_101','1'),('test_1_102','1'),('test_1_103','1'),('test_1_104','1'),('test_1_105','1'),('test_1_106','1'),('test_1_107','1'),('test_1_108','1'),('test_1_109','1'),('test_1_110','1'),('test_1_111','1'),('test_1_112','1'),('test_1_113','1'),('test_1_114','1'),('test_1_115','1'),('test_1_116','1'),('test_1_117','1'),('test_1_118','1'),('test_1_119','1'),('test_1_120','1'),('test_1_121','1'),('test_1_122','1'),('test_1_123','1'),('test_1_124','1'),('test_1_125','1'),('test_1_126','1'),('test_1_127','1'),('test_1_128','1'),('test_1_129','1'),('test_1_130','1'),('test_1_131','1'),('test_1_132','1'),('test_1_133','1'),('test_1_134','1'),('test_1_135','1'),('test_1_136','1'),('test_1_137','1'),('test_1_138','1'),('test_1_139','1'),('test_1_140','1'),('test_1_141','1'),('test_1_142','1'),('test_1_143','1'),('test_1_144','1'),('test_1_145','1'),('test_1_146','1'),('test_1_147','1'),('test_1_148','1'),('test_1_149','1'),('test_1_150','1'),('test_1_151','1'),('test_1_152','1'),('test_1_153','1'),('test_1_154','1'),('test_1_155','1'),('test_1_156','1'),('test_1_157','1'),('test_1_158','1'),('test_1_159','1'),('test_1_160','1'),('test_1_161','1'),('test_1_162','1'),('test_1_163','1'),('test_1_164','1'),('test_1_165','1'),('test_1_166','1'),('test_1_167','1'),('test_1_168','1'),('test_1_169','1'),('test_1_170','1'),('test_1_171','1'),('test_1_172','1'),('test_1_173','1'),('test_1_174','1'),('test_1_175','1'),('test_1_176','1'),('test_1_177','1'),('test_1_178','1'),('test_1_179','1'),('test_1_180','1'),('test_1_181','1'),('test_1_182','1'),('test_1_183','1'),('test_1_184','1'),('test_1_185','1'),('test_1_186','1'),('test_1_187','1'),('test_1_188','1'),('test_1_189','1'),('test_1_190','1'),('test_1_191','1'),('test_1_192','1'),('test_1_193','1'),('test_1_194','1'),('test_1_195','1'),('test_1_196','1'),('test_1_197','1'),('test_1_198','1'),('test_1_199','1'),('test_1_200','1'),('test_1_201','1'),('test_1_202','1'),('test_1_203','1'),('test_1_204','1'),('test_1_205','1'),('test_1_206','1'),('test_1_207','1'),('test_1_208','1'),('test_1_209','1'),('test_1_210','1'),('test_1_211','1'),('test_1_212','1'),('test_1_213','1'),('test_1_214','1'),('test_1_215','1'),('test_1_216','1'),('test_1_217','1'),('test_1_218','1'),('test_1_219','1'),('test_1_220','1'),('test_1_221','1'),('test_1_222','1'),('test_1_223','1'),('test_1_224','1'),('test_1_225','1'),('test_1_226','1'),('test_1_227','1'),('test_1_228','1'),('test_1_229','1'),('test_1_230','1'),('test_1_231','1'),('test_1_232','1'),('test_1_233','1'),('test_1_234','1'),('test_1_235','1'),('test_1_236','1'),('test_1_237','1'),('test_1_238','1'),('test_1_239','1'),('test_1_240','1'),('test_1_241','1'),('test_1_242','1'),('test_1_243','1'),('test_1_244','1'),('test_1_245','1'),('test_1_246','1'),('test_1_247','1'),('test_1_248','1'),('test_1_249','1'),('test_1_250','1'),('test_1_251','1'),('test_1_252','1'),('test_1_253','1'),('test_1_254','1'),('test_1_255','1'),('test_1_256','1'),('test_1_257','1'),('test_1_258','1'),('test_1_259','1'),('test_1_260','1'),('test_1_261','1'),('test_1_262','1'),('test_1_263','1'),('test_1_264','1'),('test_1_265','1'),('test_1_266','1'),('test_1_267','1'),('test_1_268','1'),('test_1_269','1'),('test_1_270','1'),('test_1_271','1'),('test_1_272','1'),('test_1_273','1'),('test_1_274','1'),('test_1_275','1'),('test_1_276','1'),('test_1_277','1'),('test_1_278','1'),('test_1_279','1'),('test_1_280','1'),('test_1_281','1'),('test_1_282','1'),('test_1_283','1'),('test_1_284','1'),('test_1_285','1'),('test_1_286','1'),('test_1_287','1'),('test_1_288','1'),('test_1_289','1'),('test_1_290','1'),('test_1_291','1'),('test_1_292','1'),('test_1_293','1'),('test_1_294','1'),('test_1_295','1'),('test_1_296','1'),('test_1_297','1'),('test_1_298','1'),('test_1_299','1'),('test_1_300','1'),('test_1_301','1'),('test_1_302','1'),('test_1_303','1'),('test_1_304','1'),('test_1_305','1'),('test_1_306','1'),('test_1_307','1'),('test_1_308','1'),('test_1_309','1'),('test_1_310','1'),('test_1_311','1'),('test_1_312','1'),('test_1_313','1'),('test_1_314','1'),('test_1_315','1'),('test_1_316','1'),('test_1_317','1'),('test_1_318','1'),('test_1_319','1'),('test_1_320','1'),('test_1_321','1'),('test_1_322','1'),('test_1_323','1'),('test_1_324','1'),('test_1_325','1'),('test_1_326','1'),('test_1_327','1'),('test_1_328','1'),('test_1_329','1'),('test_1_330','1'),('test_1_331','1'),('test_1_332','1'),('test_1_333','1'),('test_1_334','1'),('test_1_335','1'),('test_1_336','1'),('test_1_337','1'),('test_1_338','1'),('test_1_339','1'),('test_1_340','1'),('test_1_341','1'),('test_1_342','1'),('test_1_343','1'),('test_1_344','1'),('test_1_345','1'),('test_1_346','1'),('test_1_347','1'),('test_1_348','1'),('test_1_349','1'),('test_1_350','1'),('test_1_351','1'),('test_1_352','1'),('test_1_353','1'),('test_1_354','1'),('test_1_355','1'),('test_1_356','1'),('test_1_357','1'),('test_1_358','1'),('test_1_359','1'),('test_1_360','1'),('test_1_361','1'),('test_1_362','1'),('test_1_363','1'),('test_1_364','1'),('test_1_365','1'),('test_1_366','1'),('test_1_367','1'),('test_1_368','1'),('test_1_369','1'),('test_1_370','1'),('test_1_371','1'),('test_1_372','1'),('test_1_373','1'),('test_1_374','1'),('test_1_375','1'),('test_1_376','1'),('test_1_377','1'),('test_1_378','1'),('test_1_379','1'),('test_1_380','1'),('test_1_381','1'),('test_1_382','1'),('test_1_383','1'),('test_1_384','1'),('test_1_385','1'),('test_1_386','1'),('test_1_387','1'),('test_1_388','1'),('test_1_389','1'),('test_1_390','1'),('test_1_391','1'),('test_1_392','1'),('test_1_393','1'),('test_1_394','1'),('test_1_395','1'),('test_1_396','1'),('test_1_397','1'),('test_1_398','1'),('test_1_399','1'),('test_1_400','1'),('test_1_401','1'),('test_1_402','1'),('test_1_403','1'),('test_1_404','1'),('test_1_405','1'),('test_1_406','1'),('test_1_407','1'),('test_1_408','1'),('test_1_409','1'),('test_1_410','1'),('test_1_411','1'),('test_1_412','1'),('test_1_413','1'),('test_1_414','1'),('test_1_415','1'),('test_1_416','1'),('test_1_417','1'),('test_1_418','1'),('test_1_419','1'),('test_1_420','1'),('test_1_421','1'),('test_1_422','1'),('test_1_423','1'),('test_1_424','1'),('test_1_425','1'),('test_1_426','1'),('test_1_427','1'),('test_1_428','1'),('test_1_429','1'),('test_1_430','1'),('test_1_431','1'),('test_1_432','1'),('test_1_433','1'),('test_1_434','1'),('test_1_435','1'),('test_1_436','1'),('test_1_437','1'),('test_1_438','1'),('test_1_439','1'),('test_1_440','1'),('test_1_441','1'),('test_1_442','1'),('test_1_443','1'),('test_1_444','1'),('test_1_445','1'),('test_1_446','1'),('test_1_447','1'),('test_1_448','1'),('test_1_449','1'),('test_1_450','1'),('test_1_451','1'),('test_1_452','1'),('test_1_453','1'),('test_1_454','1'),('test_1_455','1'),('test_1_456','1'),('test_1_457','1'),('test_1_458','1'),('test_1_459','1'),('test_1_460','1'),('test_1_461','1'),('test_1_462','1'),('test_1_463','1'),('test_1_464','1'),('test_1_465','1'),('test_1_466','1'),('test_1_467','1'),('test_1_468','1'),('test_1_469','1'),('test_1_470','1'),('test_1_471','1'),('test_1_472','1'),('test_1_473','1'),('test_1_474','1'),('test_1_475','1'),('test_1_476','1'),('test_1_477','1'),('test_1_478','1'),('test_1_479','1'),('test_1_480','1'),('test_1_481','1'),('test_1_482','1'),('test_1_483','1'),('test_1_484','1'),('test_1_485','1'),('test_1_486','1'),('test_1_487','1'),('test_1_488','1'),('test_1_489','1'),('test_1_490','1'),('test_1_491','1'),('test_1_492','1'),('test_1_493','1'),('test_1_494','1'),('test_1_495','1'),('test_1_496','1'),('test_1_497','1'),('test_1_498','1'),('test_1_499','1'),('test_1_500','1'),('test_1_501','1'),('test_1_502','1'),('test_1_503','1'),('test_1_504','1'),('test_1_505','1'),('test_1_506','1'),('test_1_507','1'),('test_1_508','1'),('test_1_509','1'),('test_1_510','1'),('test_1_511','1'),('test_1_512','1'),('test_1_513','1'),('test_1_514','1'),('test_1_515','1'),('test_1_516','1'),('test_1_517','1'),('test_1_518','1'),('test_1_519','1'),('test_1_520','1'),('test_1_521','1'),('test_1_522','1'),('test_1_523','1'),('test_1_524','1'),('test_1_525','1'),('test_1_526','1'),('test_1_527','1'),('test_1_528','1'),('test_1_529','1'),('test_1_530','1'),('test_1_531','1'),('test_1_532','1'),('test_1_533','1'),('test_1_534','1'),('test_1_535','1'),('test_1_536','1'),('test_1_537','1'),('test_1_538','1'),('test_1_539','1'),('test_1_540','1'),('test_1_541','1'),('test_1_542','1'),('test_1_543','1'),('test_1_544','1'),('test_1_545','1'),('test_1_546','1'),('test_1_547','1'),('test_1_548','1'),('test_1_549','1'),('test_1_550','1'),('test_1_551','1'),('test_1_552','1'),('test_1_553','1'),('test_1_554','1'),('test_1_555','1'),('test_1_556','1'),('test_1_557','1'),('test_1_558','1'),('test_1_559','1'),('test_1_560','1'),('test_1_561','1'),('test_1_562','1'),('test_1_563','1'),('test_1_564','1'),('test_1_565','1'),('test_1_566','1'),('test_1_567','1'),('test_1_568','1'),('test_1_569','1'),('test_1_570','1'),('test_1_571','1'),('test_1_572','1'),('test_1_573','1'),('test_1_574','1'),('test_1_575','1'),('test_1_576','1'),('test_1_577','1'),('test_1_578','1'),('test_1_579','1'),('test_1_580','1'),('test_1_581','1'),('test_1_582','1'),('test_1_583','1'),('test_1_584','1'),('test_1_585','1'),('test_1_586','1'),('test_1_587','1'),('test_1_588','1'),('test_1_589','1'),('test_1_590','1'),('test_1_591','1'),('test_1_592','1'),('test_1_593','1'),('test_1_594','1'),('test_1_595','1'),('test_1_596','1'),('test_1_597','1'),('test_1_598','1'),('test_1_599','1'),('test_1_600','1'),('test_1_601','1'),('test_1_602','1'),('test_1_603','1'),('test_1_604','1'),('test_1_605','1'),('test_1_606','1'),('test_1_607','1'),('test_1_608','1'),('test_1_609','1'),('test_1_610','1'),('test_1_611','1'),('test_1_612','1'),('test_1_613','1'),('test_1_614','1'),('test_1_615','1'),('test_1_616','1'),('test_1_617','1'),('test_1_618','1'),('test_1_619','1'),('test_1_620','1'),('test_1_621','1'),('test_1_622','1'),('test_1_623','1'),('test_1_624','1'),('test_1_625','1'),('test_1_626','1'),('test_1_627','1'),('test_1_628','1'),('test_1_629','1'),('test_1_630','1'),('test_1_631','1'),('test_1_632','1'),('test_1_633','1'),('test_1_634','1'),('test_1_635','1'),('test_1_636','1'),('test_1_637','1'),('test_1_638','1'),('test_1_639','1'),('test_1_640','1'),('test_1_641','1'),('test_1_642','1'),('test_1_643','1'),('test_1_644','1'),('test_1_645','1'),('test_1_646','1'),('test_1_647','1'),('test_1_648','1'),('test_1_649','1'),('test_1_650','1'),('test_1_651','1'),('test_1_652','1'),('test_1_653','1'),('test_1_654','1'),('test_1_655','1'),('test_1_656','1'),('test_1_657','1'),('test_1_658','1'),('test_1_659','1'),('test_1_660','1'),('test_1_661','1'),('test_1_662','1'),('test_1_663','1'),('test_1_664','1'),('test_1_665','1'),('test_1_666','1'),('test_1_667','1'),('test_1_668','1'),('test_1_669','1'),('test_1_670','1'),('test_1_671','1'),('test_1_672','1'),('test_1_673','1'),('test_1_674','1'),('test_1_675','1'),('test_1_676','1'),('test_1_677','1'),('test_1_678','1'),('test_1_679','1'),('test_1_680','1'),('test_1_681','1'),('test_1_682','1'),('test_1_683','1'),('test_1_684','1'),('test_1_685','1'),('test_1_686','1'),('test_1_687','1'),('test_1_688','1'),('test_1_689','1'),('test_1_690','1'),('test_1_691','1'),('test_1_692','1'),('test_1_693','1'),('test_1_694','1'),('test_1_695','1'),('test_1_696','1'),('test_1_697','1'),('test_1_698','1'),('test_1_699','1'),('test_1_700','1'),('test_1_701','1'),('test_1_702','1'),('test_1_703','1'),('test_1_704','1'),('test_1_705','1'),('test_1_706','1'),('test_1_707','1'),('test_1_708','1'),('test_1_709','1'),('test_1_710','1'),('test_1_711','1'),('test_1_712','1'),('test_1_713','1'),('test_1_714','1'),('test_1_715','1'),('test_1_716','1'),('test_1_717','1'),('test_1_718','1'),('test_1_719','1'),('test_1_720','1'),('test_1_721','1'),('test_1_722','1'),('test_1_723','1'),('test_1_724','1'),('test_1_725','1'),('test_1_726','1'),('test_1_727','1'),('test_1_728','1'),('test_1_729','1'),('test_1_730','1'),('test_1_731','1'),('test_1_732','1'),('test_1_733','1'),('test_1_734','1'),('test_1_735','1'),('test_1_736','1'),('test_1_737','1'),('test_1_738','1'),('test_1_739','1'),('test_1_740','1'),('test_1_741','1'),('test_1_742','1'),('test_1_743','1'),('test_1_744','1'),('test_1_745','1'),('test_1_746','1'),('test_1_747','1'),('test_1_748','1'),('test_1_749','1'),('test_1_750','1'),('test_1_751','1'),('test_1_752','1'),('test_1_753','1'),('test_1_754','1'),('test_1_755','1'),('test_1_756','1'),('test_1_757','1'),('test_1_758','1'),('test_1_759','1'),('test_1_760','1'),('test_1_761','1'),('test_1_762','1'),('test_1_763','1'),('test_1_764','1'),('test_1_765','1'),('test_1_766','1'),('test_1_767','1'),('test_1_768','1'),('test_1_769','1'),('test_1_770','1'),('test_1_771','1'),('test_1_772','1'),('test_1_773','1'),('test_1_774','1'),('test_1_775','1'),('test_1_776','1'),('test_1_777','1'),('test_1_778','1'),('test_1_779','1'),('test_1_780','1'),('test_1_781','1'),('test_1_782','1'),('test_1_783','1'),('test_1_784','1'),('test_1_785','1'),('test_1_786','1'),('test_1_787','1'),('test_1_788','1'),('test_1_789','1'),('test_1_790','1'),('test_1_791','1'),('test_1_792','1'),('test_1_793','1'),('test_1_794','1'),('test_1_795','1'),('test_1_796','1'),('test_1_797','1'),('test_1_798','1'),('test_1_799','1'),('test_1_800','1'),('test_1_801','1'),('test_1_802','1'),('test_1_803','1'),('test_1_804','1'),('test_1_805','1'),('test_1_806','1'),('test_1_807','1'),('test_1_808','1'),('test_1_809','1'),('test_1_810','1'),('test_1_811','1'),('test_1_812','1'),('test_1_813','1'),('test_1_814','1'),('test_1_815','1'),('test_1_816','1'),('test_1_817','1'),('test_1_818','1'),('test_1_819','1'),('test_1_820','1'),('test_1_821','1'),('test_1_822','1'),('test_1_823','1'),('test_1_824','1'),('test_1_825','1'),('test_1_826','1'),('test_1_827','1'),('test_1_828','1'),('test_1_829','1'),('test_1_830','1'),('test_1_831','1'),('test_1_832','1'),('test_1_833','1'),('test_1_834','1'),('test_1_835','1'),('test_1_836','1'),('test_1_837','1'),('test_1_838','1'),('test_1_839','1'),('test_1_840','1'),('test_1_841','1'),('test_1_842','1'),('test_1_843','1'),('test_1_844','1'),('test_1_845','1'),('test_1_846','1'),('test_1_847','1'),('test_1_848','1'),('test_1_849','1'),('test_1_850','1'),('test_1_851','1'),('test_1_852','1'),('test_1_853','1'),('test_1_854','1'),('test_1_855','1'),('test_1_856','1'),('test_1_857','1'),('test_1_858','1'),('test_1_859','1'),('test_1_860','1'),('test_1_861','1'),('test_1_862','1'),('test_1_863','1'),('test_1_864','1'),('test_1_865','1'),('test_1_866','1'),('test_1_867','1'),('test_1_868','1'),('test_1_869','1'),('test_1_870','1'),('test_1_871','1'),('test_1_872','1'),('test_1_873','1'),('test_1_874','1'),('test_1_875','1'),('test_1_876','1'),('test_1_877','1'),('test_1_878','1'),('test_1_879','1'),('test_1_880','1'),('test_1_881','1'),('test_1_882','1'),('test_1_883','1'),('test_1_884','1'),('test_1_885','1'),('test_1_886','1'),('test_1_887','1'),('test_1_888','1'),('test_1_889','1'),('test_1_890','1'),('test_1_891','1'),('test_1_892','1'),('test_1_893','1'),('test_1_894','1'),('test_1_895','1'),('test_1_896','1'),('test_1_897','1'),('test_1_898','1'),('test_1_899','1'),('test_1_900','1'),('test_1_901','1'),('test_1_902','1'),('test_1_903','1'),('test_1_904','1'),('test_1_905','1'),('test_1_906','1'),('test_1_907','1'),('test_1_908','1'),('test_1_909','1'),('test_1_910','1'),('test_1_911','1'),('test_1_912','1'),('test_1_913','1'),('test_1_914','1'),('test_1_915','1'),('test_1_916','1'),('test_1_917','1'),('test_1_918','1'),('test_1_919','1'),('test_1_920','1'),('test_1_921','1'),('test_1_922','1'),('test_1_923','1'),('test_1_924','1'),('test_1_925','1'),('test_1_926','1'),('test_1_927','1'),('test_1_928','1'),('test_1_929','1'),('test_1_930','1'),('test_1_931','1'),('test_1_932','1'),('test_1_933','1'),('test_1_934','1'),('test_1_935','1'),('test_1_936','1'),('test_1_937','1'),('test_1_938','1'),('test_1_939','1'),('test_1_940','1'),('test_1_941','1'),('test_1_942','1'),('test_1_943','1'),('test_1_944','1'),('test_1_945','1'),('test_1_946','1'),('test_1_947','1'),('test_1_948','1'),('test_1_949','1'),('test_1_950','1'),('test_1_951','1'),('test_1_952','1'),('test_1_953','1'),('test_1_954','1'),('test_1_955','1'),('test_1_956','1'),('test_1_957','1'),('test_1_958','1'),('test_1_959','1'),('test_1_960','1'),('test_1_961','1'),('test_1_962','1'),('test_1_963','1'),('test_1_964','1'),('test_1_965','1'),('test_1_966','1'),('test_1_967','1'),('test_1_968','1'),('test_1_969','1'),('test_1_970','1'),('test_1_971','1'),('test_1_972','1'),('test_1_973','1'),('test_1_974','1'),('test_1_975','1'),('test_1_976','1'),('test_1_977','1'),('test_1_978','1'),('test_1_979','1'),('test_1_980','1'),('test_1_981','1'),('test_1_982','1'),('test_1_983','1'),('test_1_984','1'),('test_1_985','1'),('test_1_986','1'),('test_1_987','1'),('test_1_988','1'),('test_1_989','1'),('test_1_990','1'),('test_1_991','1'),('test_1_992','1'),('test_1_993','1'),('test_1_994','1'),('test_1_995','1'),('test_1_996','1'),('test_1_997','1'),('test_1_998','1'),('test_1_999','1');";
        logger.info(String.valueOf(sql.length()));
    }

    /**
     * 执行添加操作
     *
     * @param sql   sql
     * @param param 参数
     * @return id
     */
    public int add(String sql, Object... param) {
        Connection conn;
        PreparedStatement preparedStatement;
        ResultSet res;
        // 预编译sql执行语句，返回当前连接执行后最新的id
        try {
            conn = initConn();
            preparedStatement = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
            if (param != null && param.length > 0) {
                for (int i = 0; i < param.length; i++) {
                    preparedStatement.setObject(i + 1, param[i]);
                }
            }
            logger.info(preparedStatement.toString());
            preparedStatement.executeUpdate();
            res = preparedStatement.getGeneratedKeys();
            int result = -1;
            if (res.next()) {
                result = res.getInt(1);
            }
            return result;
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }

    }

    public JSONArray listJSON(String sql, Object... param) {
        logger.debug("获取listJSON");
        JSONArray jsonArray = new JSONArray();
        Connection conn;
        try {
            conn = initConn();
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            if (param != null && param.length > 0) {
                for (int i = 0; i < param.length; i++) {
                    preparedStatement.setObject(i + 1, param[i]);
                }
            }
            ResultSet res = preparedStatement.executeQuery();
            ResultSetMetaData data = res.getMetaData();
            int columnCount = data.getColumnCount();
            while (res.next()) {
                JSONObject jo = new JSONObject();
                for (int i = 0; i < columnCount; i++) {
                    jo.put(data.getColumnLabel(i), res.getObject(data.getColumnLabel(i)));
                }
                jsonArray.add(jo);
            }
        } catch (Exception e) {
            logger.debug("获取listJSON失败");
        }
        return jsonArray;
    }

    public List getList(String sql, Object... param) {
        Map data;
        Connection conn = null;
        List datas = new ArrayList();
        try {
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            if (param != null && param.length > 0) {
                for (int i = 0; i < param.length; i++) {
                    preparedStatement.setObject(i + 1, param[i]);
                }
            }
            ResultSet resultSet = preparedStatement.executeQuery();
            ResultSetMetaData resultSetMetaData = preparedStatement.getMetaData();
            int columnCount = resultSetMetaData.getColumnCount();
            while (resultSet.next()) {
                data = new HashMap<String, Object>();
                for (int i = 1; i < columnCount + 1; i++) {
                    data.put(resultSetMetaData.getColumnLabel(i), resultSet.getObject(resultSetMetaData.getColumnLabel(i)));
                }
                datas.add(data);
            }
            return datas;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                assert conn != null;
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 初始化链接
     */
    private Connection initConn() throws SQLException {
        Connection conn;
        if (GFTransactionalManage.needTransactional()) {
            if (threadConn == null || threadConn.get() == null) {
                conn = DataSourceUtils.getConnection(dataSource);
                logger.debug("设置该链接 commit：false");
                conn.setAutoCommit(false);
                threadConn.set(conn);
            } else {
                conn = threadConn.get();
            }
        } else {
            conn = DataSourceUtils.getConnection(dataSource);
            logger.debug("设置该链接 commit：true");
            conn.setAutoCommit(true);
        }
        return conn;
    }

    /**
     * 提交链接
     */
    public void commitConn() {
        Connection connection = null;
        if (threadConn != null && threadConn.get() != null) {
            connection = threadConn.get();
        }
        if (connection == null) {
            return;
        }
        try {
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        threadConn.remove();
    }

    /**
     * 回滚链接
     */
    public void rollbackConn() {
        Connection connection = null;
        if (threadConn != null && threadConn.get() != null) {
            connection = threadConn.get();
        }
        if (connection != null) {
            try {
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭链接
     */
    public void closeConn() {
        Connection connection = null;
        if (threadConn != null && threadConn.get() != null) {
            connection = threadConn.get();
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
